﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CI.Caja.BE;
using System.Data.SqlClient;

namespace CI.Caja.DL
{
    public class DA_Arqueo : IDA_Arqueo
    {

        public ICollection<BE_Arqueo> ListarArqueo()
        {
            ICollection<BE.BE_Arqueo> arqueoExistente = new List<BE.BE_Arqueo>();
            BE_Arqueo arqueo = null;

            //string sentencia = "SELECT idArqueo,idCajero,convert(varchar(10),fecFechaArqueo,103) as fecFechaArqueo,convert(varchar(10),horaArqueo,108) as horaArqueo,convert(varchar(10),fecFechaReg,103) as fecFechaReg,idPuntoVenta,numImporteTotal FROM CA_ARQUEO";
            string sentencia = "SELECT idArqueo,Cajero=txtApellido + ' ' +txtNombre,convert(varchar(10),fecFechaArqueo,103) as fecFechaArqueo,convert(varchar(10),horaArqueo,108) as horaArqueo,convert(varchar(10),fecFechaReg,103) as fecFechaReg,PtoVenta=txtDescripcion,numImporteTotal FROM CA_ARQUEO  A INNER JOIN dbo.CA_PERSONAL P  ON P.idPersonal= A.idCajero  INNER JOIN dbo.CA_PUNTOVENTA PV ON PV.idPuntoVenta=A.idPuntoVenta";

            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    SqlDataReader resultado = comando.ExecuteReader();
                    while (resultado.Read())
                    {
                        arqueo = new BE_Arqueo();
                        arqueo.IdArqueo = (int)resultado["idArqueo"];
                        arqueo.Cajero = (string)resultado["Cajero"];
                        arqueo.Fecha = (string)resultado["fecFechaArqueo"];
                        arqueo.Hora = (string)resultado["horaArqueo"];
                        arqueo.PtoVta = (string)resultado["PtoVenta"];
                        arqueo.ImporteTotal = (decimal)resultado["numImporteTotal"];
                        arqueoExistente.Add(arqueo);
                    }
                }
            }
            return arqueoExistente;
        }
       
       public BE_Arqueo RegistrarArqueo(BE_Arqueo arqueo)
       {
           //string sentencia = "INSERT INTO CA_ARQUEO(idArqueo,idPersonal,fecFechaArqueo,horaArqueo,fecFechaReg,idPuntoVenta,numImporteTotal) VALUES (@idArqueo, @idPersonal, getdate(), @horaArqueo,getdate(),@idPuntoVenta,@numImporteTotal)";
           string sentencia = "INSERT INTO CA_ARQUEO(idArqueo,idCajero,fecFechaArqueo,horaArqueo,fecFechaReg,idPuntoVenta,numImporteTotal) VALUES (@idArqueo, @idCajero, getdate(), @horaArqueo,getdate(),@idPuntoVenta,@numImporteTotal)";
           //SqlTransaction transaccion;
           string idArqueo = ObtenerCodigo();
           

           //using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
           using (SqlConnection conexion = DA_SingletonConexion.ConnectionInstance)
           {
               conexion.Open();
               //transaccion = conexion.BeginTransaction();

               try
               {
                   using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                   {
                       arqueo.IdArqueo = Convert.ToInt32(idArqueo);//Convert.ToInt32(ObtenerCodigo());
                       comando.Parameters.Add(new SqlParameter("@idArqueo",arqueo.IdArqueo ));
                      // comando.Parameters.Add(new SqlParameter("@idPersonal", arqueo.IdCajero));
                       comando.Parameters.Add(new SqlParameter("@idCajero", arqueo.IdCajero));
                       comando.Parameters.Add(new SqlParameter("@horaArqueo", arqueo.Hora));
                       comando.Parameters.Add(new SqlParameter("@idPuntoVenta", arqueo.IdPtoVta));
                       comando.Parameters.Add(new SqlParameter("@numImporteTotal", arqueo.ImporteTotal));
                       comando.ExecuteNonQuery();
                   }
               }
               catch (SqlException error)
               {
                   throw new Exception(error.Message);
               }
               finally
               {
                   if (conexion != null)
                   {
                       if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                   }
               }

           }
           return ObtenerArqueo(arqueo.IdArqueo);
       }


       public BE_Arqueo ObtenerArqueo(int idArqueo)
       {
           BE_Arqueo arqueo = null;

           //string sentencia = "SELECT idArqueo,idPersonal,convert(varchar(10),fecFechaArqueo,103) as fecFechaArqueo,convert(varchar(10),horaArqueo,108) as horaArqueo,convert(varchar(10),fecFechaReg,103) as fecFechaReg,idPuntoVenta,numImporteTotal FROM CA_ARQUEO WHERE idArqueo=@idArqueo";
           string sentencia = "SELECT idArqueo,idCajero,convert(varchar(10),fecFechaArqueo,103) as fecFechaArqueo,convert(varchar(10),horaArqueo,108) as horaArqueo,convert(varchar(10),fecFechaReg,103) as fecFechaReg,idPuntoVenta,numImporteTotal FROM CA_ARQUEO WHERE idArqueo=@idArqueo";
           //using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
           using (SqlConnection conexion = DA_SingletonConexion.ConnectionInstance)
           {
               conexion.Open();

               try
               {
               using (SqlCommand comando = new SqlCommand(sentencia, conexion))
               {
                   comando.Parameters.Add(new SqlParameter("@idArqueo", idArqueo));

                   SqlDataReader resultado = comando.ExecuteReader();
                   if (resultado.Read())
                   {
                       arqueo = new BE_Arqueo();
                       arqueo.IdArqueo = (int)resultado["idArqueo"];
                      // arqueo.IdCajero = (string)resultado["idPersonal"];
                       arqueo.IdCajero = (string)resultado["idCajero"];
                       arqueo.Fecha = (string)resultado["fecFechaArqueo"];
                       arqueo.Hora = (string)resultado["horaArqueo"];
                       arqueo.IdPtoVta = (int)resultado["idPuntoVenta"];
                       arqueo.ImporteTotal = (decimal)resultado["numImporteTotal"];
                     
                   }
               }

               }
               catch (SqlException error)
               {
                   throw new Exception(error.Message);
               }
               finally
               {
                   if (conexion != null)
                   {
                       if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                   }
               }
           }
           return arqueo;
       }


       public string ObtenerCodigo()
       {
           string codigo = "";
           string sentencia = "Select ISNULL(MAX(idarqueo),0)+1 as Codigo from CA_ARQUEO";
           //using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
           using (SqlConnection conexion = DA_SingletonConexion.ConnectionInstance)
           {
               conexion.Open();

                try
               {

               using (SqlCommand comando = new SqlCommand(sentencia, conexion))
               {
                   SqlDataReader resultado = comando.ExecuteReader();
                   if (resultado.Read())
                   {
                       codigo = resultado["Codigo"].ToString();

                   }
               }


               }
                catch (SqlException error)
                {
                    throw new Exception(error.Message);
                }
                finally
                {
                    if (conexion != null)
                    {
                        if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                    }
                }
           }
           return codigo;
       }
    }
}
